[Xamarin.Mac] メニューを追加してみました
1 はじめに
CX事業本部の平内(SIN)です。
Xamarin.Macを使用すると、C#でネイティブなMacのアプリが作成可能です。 ここでは、私自身がXamarin.Macに入門して学習した事項を覚書として書かせて頂いています。
今回は、メニューを操作してみました。
2 メニューの追加
メニューの追加は、Interface Builderを使用すると、簡単に追加できます。 トップの項目は、Menu(NSMenu)で、その下は、MenuItem(NSMenuItem)を使用します。
タイトルは、プロパティで設定します。
3 IBActionによる処理
AssistantでAppDevegate.hを開き、IBActionを作成します。
C#からは、partialで定義されたメソッド myMenuItem1() を実装します。
[Register("AppDelegate")] public partial class AppDelegate : NSApplicationDelegate { public AppDelegate() { } partial void myMenuItem1(NSObject sender) { Console.WriteLine("meMenuItem1"); }
4 First Responder
First Responderを開き、新規にアクションを追加します。
追加したアクションは、一覧に表示されますので、メニューに紐付けます。
First Responderからメッセージは、C#から [Export("ActionName:")] で処理します。下記は、AppDelegate.csで処理しているコードです。
[Register("AppDelegate")] public partial class AppDelegate : NSApplicationDelegate { public AppDelegate() { } [Export("myMenuItem2:")] public void myMenuItem2(NSObject sender) { Console.WriteLine("myMenuItemn2"); }
First Responderからメッセージは、ViewControllerでも処理出来ます。
public partial class ViewController : NSViewController { public ViewController(IntPtr handle) : base(handle) { } [Export("myMenuItem2:")] public void myMenuItem2(NSObject sender) { Console.WriteLine("myMenuItemn2-ViewController"); }
5 最後に
今回は、メニューについて確認してみました。
Xamarin.Macで新規にCocoaアプリを作成すると、最初から一般的なメニューが配置されており、First Responderでデフォルトの処理に紐付いています。
Macの標準的なインターフェースに従うには、まずは、この動作を尊重することが重要だと思います。
また、First Responderのデフォルト動作は、[Export("ActionName:")] でいつでもトラップ出来ますので、必要に応じてオーバーライドすれば良いでしょう。